/**
 * Created by QianQi on 2017/5/25.
 */
$(function(){
    var oHideParams = $.getHideParams();// <body> 下隐藏域键值对，name 为键
    var oUrlParams = $.getUrlParams();// url 附加参数键值对
    var URLS = {
        d_suc: 'demo_suc.json',// 模拟请求成功，且 success=true
        d_err: 'demo_err.json',// 模拟请求成功，但 success=false
        d_none: 'demo_.json'// 模拟请求失败
    };

    var jqLog = $('.js-log');
    // 日志输出
    var fLog = function(str){
        jqLog.append('<p>' + str + '</p>');
    };
    // 顶部按钮点击事件
    var fTbtnsClick = function(){
        var jqThis = $(this),
            name = jqThis.attr('data-type');
        var fOnSuccess = function(data){
            fLog('【end ' + name + '】(success) data:' + data);
        };
        // 自定义异常处理：请求失败或 success=false 均会调用
        var fOnError = function(oErrInfo){
            var reqType = oErrInfo.type;
            // oErrObj.type = 'success' 时，oErrInfo 中还包含：msg, result, textStatus, jqXHR
            // oErrObj.type = 'error' 时，oErrInfo 中还包含：msg, errorThrown, textStatus, jqXHR
            switch(reqType){
                case 'success':
                    fLog('<span class="t_red">【end ' + name + '】(error) req-type:' + reqType + ': ' + oErrInfo.msg + '</span>');
                    break;
                case 'error':
                    fLog('<span class="t_red">【end ' + name + '】(error) req-type:' + reqType + ': ' + oErrInfo.jqXHR.status + '</span>');
                    break;
            }
        };

        fLog('【begin ' + name + '】');
        switch(name){
            case 'normal':// 一般情况
                $.request({
                    onSuccess: fOnSuccess,
                    ajaxOpts: {
                        url: URLS.d_suc,
                        data: {// 请求参数
                            user: 'qq',
                            comp: 'wisoft'
                        }
                    },
                    showloading: true// 显示加载条
                });
                break;
            case 'err0':// 请求成功，但 success=false
                $.request({
                    onSuccess: fOnSuccess,
                    ajaxOpts: {
                        url: URLS.d_err
                    }
                });
                break;
            case 'err1onError':// 请求失败
                $.request({
                    onSuccess: fOnSuccess,
                    onError: fOnError,// 自定义失败回调 onError（请求失败或 success=false 均会调用，默认显示错误提示）
                    ajaxOpts: {
                        url: URLS.d_none
                    }
                });
                break;
            case 'err0onError':// 请求成功，但 success=false 时，自定义失败回调 onError
                $.request({
                    onSuccess: fOnSuccess,
                    onError: fOnError,
                    ajaxOpts: {
                        url: URLS.d_err
                    }
                });
                break;
            case 'complex':// 请求时传递复杂参数：JSON.stringify() 配合 argToJson:true
                $.request({
                    onSuccess: fOnSuccess,
                    onError: fOnError,
                    ajaxOpts: {
                        url: URLS.d_suc,
                        data: JSON.stringify({
                            user: 'qq',
                            fav: ['0', '1', '2']
                        })
                    },
                    argToJson: true
                });
                break;
        }
    };
    /** ============== **/
    $('.js-tbtns').on('click', 'button', fTbtnsClick);// 顶部按钮点击事件
});